Integrated circuits (ICs) may be implemented to perform a variety of functions. Some ICs may be programmed to perform specified functions. One example of an IC that may be programmed is a field programmable gate array (FPGA). An FPGA typically includes an array of programmable tiles. Each programmable tile may include both programmable interconnect circuitry and programmable logic circuitry.
The programmable interconnect and programmable logic circuitries are typically programmed by loading a stream of configuration data into internal configuration memory cells that define how the programmable elements are configured. The configuration data may be read from memory (e.g., from an external PROM) or written into the FPGA by an external device. The collective states of the individual memory cells then determine the function of the FPGA.
Another type of programmable IC is the complex programmable logic device, or CPLD. A CPLD includes two or more “function circuit blocks” connected together and to input/output (I/O) resources by an interconnect switch matrix. Each function circuit block of the CPLD may include a two-level AND/OR structure similar to those used in programmable logic arrays (PLAs) and programmable array logic (PAL) devices. In CPLDs, configuration data is typically stored on-chip in non-volatile memory. In some CPLDs, configuration data is stored on-chip in non-volatile memory, then downloaded to volatile memory as part of an initial configuration (programming) sequence.
For all of these programmable ICs, the functionality of the device is controlled by data bits provided to the device for that purpose. The data bits may be stored in volatile memory (e.g., static memory cells, as in FPGAs and some CPLDs), in non-volatile memory (e.g., FLASH memory, as in some CPLDs), or in any other type of memory cell.
Other programmable ICs may be programmed by applying a processing layer, such as a metal layer, that programmably interconnects the various elements on the device. These programmable ICs are known as mask programmable devices. Programmable ICs may also be implemented in other ways, e.g., using fuse or antifuse technology. The phrase “programmable IC” may include, but is not limited to, these devices and further may encompass devices that are only partially programmable. For example, one type of programmable IC includes a combination of hard-coded transistor logic and a programmable switch fabric that programmably interconnects the hard-coded transistor logic.
Creating a circuit design that may be implemented within a programmable IC is largely performed by experienced hardware (e.g., circuit) designers. Circuit design requires specialized knowledge relating to circuits in general, the particular architecture of the programmable IC in which the circuit design is to be implemented (the “target IC”), as well as the particular electronic design automation (EDA) tools that will be used. For example, a circuit designer must understand the many different implementation parameters that are required by the EDA tool to generate a working circuit design and further understand how those parameters influence hardware generation processes such as synthesis, placement, and/or routing. Often, these implementation parameters are EDA tool specific and highly correlated with the architecture of the target IC. In consequence, circuit design has remained out of reach of many users including software developers.